package com.research.project.mapper;

import java.util.List;
import com.research.project.domain.Project;
import org.apache.ibatis.annotations.Param;

/**
 * 项目管理Mapper接口
 * 
 * @author ghn
 * @date 2025-09-03
 */
public interface ProjectMapper 
{
    /**
     * 查询项目管理
     * 
     * @param id 项目管理主键
     * @return 项目管理
     */
    public Project selectProjectById(Long id);

    /**
     * 查询项目管理列表
     * 
     * @param project 项目管理
     * @return 项目管理集合
     */
    public List<Project> selectProjectList(Project project);

    /**
     * 新增项目管理
     * 
     * @param project 项目管理
     * @return 结果
     */
    public int insertProject(Project project);

    /**
     * 修改项目管理
     * 
     * @param project 项目管理
     * @return 结果
     */
    public int updateProject(Project project);

    /**
     * 删除项目管理
     * 
     * @param id 项目管理主键
     * @return 结果
     */
    public int deleteProjectById(Long id);

    /**
     * 批量删除项目管理
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteProjectByIds(Long[] ids);

    /**
     * 根据项目的id查找出所有与之关联的负责人
     * @param project_id
     * @return
     */
    public Long selectUserByProjectId(Long project_id);

    /**
     * 根据项目的id查找出所有与之关联的成员
     * @param project_id
     * @return
     */
    List<Long> selectMemberByProjectId(Long project_id);

    /**
     * 插入负责人和项目之间的关系
     * @param leader_id
     * @param project_id
     */
    void insertleader_project(@Param("leaderId")Long leader_id, @Param("projectId")Long project_id);

    /**
     * 插入成员和项目之间的关系
     * @param member_id
     * @param project_id
     */
    void insertmember_project(@Param("memberId")Long member_id, @Param("projectId")Long project_id);

    /**
     * 根据项目的id删除项目与负责人之间的关系
     * @param id
     */
    void deleteLeader_projectByProjectId(Long id);

    /**
     * 根据项目的id删除项目与成员之间的关系
     * @param id
     */
    void deleteMember_projectByProjectId(Long id);

    /**
     * 更新负责人
     * @param id
     * @param leaderId
     */
    void updateLeaderProject(@Param("projectId")Long id, @Param("leaderId")Long leaderId);

    /**
     * 获取所有的项目id
     * @return
     */
    List<Long> selectProjectId();

    /**
     * 根据项目的ids批量寻找项目名称
     * @param projectIds
     * @return
     */
    List<String> selectProjectNameListByIds(@Param("list") List<Long> projectIds);

    /**
     * 根据项目名称查找项目
     * @param projectName
     * @return
     */
    Project selectByName(String projectName);

    /**
     * 根据项目id查找对应的名称
     * @param id
     * @return
     */
    String selectNameById(Long id);
}
